/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ravennet.manager;
import com.ravennet.dataobject.CasillaDataObject;
import com.ravennet.dataobject.LetraDataObject;
import com.ravennet.dataobject.PartidaDataObject;
import com.ravennet.dataobject.TableroDataObject;
import com.ravennet.dataobject.UsuarioDataObject;
import com.ravennet.utils.RavennetHashMap;
import java.util.ArrayList;


public class CrucigramaManager {

    private CasillaDataObject[][] tablero=null;
    
    private ArrayList<LetraDataObject> bolsaLetrasActual=null;
    
    private RavennetHashMap<String,LetraDataObject> mapaLetras = new RavennetHashMap<String,LetraDataObject>();
    
    private TableroDataObject tableroDo = new TableroDataObject();

    private PartidaManager partidaManager = new PartidaManager();

    //Constructor
    public CrucigramaManager(){
        
    }
    
    public PartidaDataObject crearNuevoJuego(String nombreCreador){
        
        UsuarioDataObject creador = new UsuarioDataObject();
        creador.setNombre(nombreCreador);
        creador.setIsTurno(true);
        creador.setNroTurno(1);
        PartidaDataObject nuevaPartida = new PartidaDataObject(creador);
        partidaManager.guardarNueva(nuevaPartida);
        return nuevaPartida;
        
        
    }
    
    public boolean validarUsuario(String nombre, String password){
        return partidaManager.validarUsuario(nombre, password);
        
    }
    
    public void registrarUsuario(String nombre, String password) throws Exception{
        partidaManager.registrarUsuario(nombre, password);
    }
    
    public PartidaDataObject buscarPartida(String partidaABuscar) {
        PartidaDataObject partida =  this.partidaManager.getPartida(partidaABuscar);
        return partida;
    }    
    
    public ArrayList<LetraDataObject> getBolsaActual() {
        return bolsaLetrasActual;
    }

    public void setBolsaActual(ArrayList<LetraDataObject> bolsaLetrasActual) {
        this.bolsaLetrasActual = bolsaLetrasActual;
    }

    public CasillaDataObject[][] getTablero() {
        return tablero;
    }

    public void setTablero(CasillaDataObject[][] tablero) {
        this.tablero = tablero;
    }
    
//    public void testTablero(){
//        this.createTablero();
//        while(this.getBolsaActual().size()>0){
//            int i = (int)(Math.floor(Math.random()*14.999));
//            int j = (int)(Math.floor(Math.random()*14.999));
//            if(this.tablero[i][j].getLetraAsignada()!=null){
//                continue;
//            }
//            this.tablero[i][j].setLetraAsignada(this.getBolsaActual().remove(0));
//        }
//    }
//    
    public void imprimirTablero(){
        for(int i=0; i<15; i++){
            for(int j=0; j<15; j++){
                System.out.print("|"+this.tablero[i][j].toString());
            }
            System.out.println();
        }    
        
    }
    
    private LetraDataObject getLetraById(String id){

        return (LetraDataObject)mapaLetras.get(id);
          
    }
    
    public String[][] getArrayTablero(){
        String[][] arrayTablero = new String[15][15];
        for(int i=0; i<15; i++){
            for(int j=0; j<15; j++){
                arrayTablero[i][j] = this.tablero[i][j].getLetraAsignada() == null ? " " : this.tablero[i][j].getLetraAsignada().getLetra();
            }
        }
        return arrayTablero;
    }
    
    
    public ArrayList<LetraDataObject> getBolsaLetrasActual() {
        return bolsaLetrasActual;
    }

    public void setBolsaLetrasActual(ArrayList<LetraDataObject> bolsaLetrasActual) {
        this.bolsaLetrasActual = bolsaLetrasActual;
    }

    public TableroDataObject getTableroDo() {
        return tableroDo;
    }

    public void setTableroDo(TableroDataObject tableroDo) {
        this.tableroDo = tableroDo;
    }
    
    public PartidaManager getPartidaManager() {
        return partidaManager;
    }
    
    
    
    public static void main(String args[]){
        
        try{
        
            CrucigramaManager m = new CrucigramaManager();
//
//            m.getNuevaBolsaLetras();
//            m.createTablero();
//            m.testTablero();
//            m.getTableroDo().setTablero(m.getTablero());
//            PartidaManager p = new PartidaManager();
////            PartidaDataObject partida = new PartidaDataObject();
////            partida.setBolsaLetras(m.getBolsaActual());
////            partida.setTablero(m.getTableroDo());
////            p.guardarNueva(partida);
//            System.out.println(p.getPartida("1").getTablero().toString());
//            
//            
//            System.out.println(m.getTableroDo().toString());
//            String input="";
//            String[][] lista = new String[4][3];
//            int i=0;
//            do{
//                input = JOptionPane.showInputDialog("colocar letra");
//                if(input==null || input.equals("end")){
//                    break;
//                }
//                lista[i] = input.split(",");
//
//                //System.out.println(m.getLetrasAleatorias(Integer.parseInt(input)));
//                //System.out.println("letras restantes : "+m.getBolsaActual().size());
//                i++;
//            }while(true);
//            m.colocarLetras(lista);
//            m.imprimirTablero();
            //System.out.println(m.getBolsaActual().size());
            //System.out.println(m.getBolsaActual());

            //m.testTablero();
            //m.imprimirTablero();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    
    
}
